home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / mach-pxa / include / mach / mfp-pxa3xx.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  9.4 KB  |  253 lines

  1. #ifndef __ASM_ARCH_MFP_PXA3XX_H
  2. #define __ASM_ARCH_MFP_PXA3XX_H
  3.  
  4. #define MFPR_BASE    (0x40e10000)
  5. #define MFPR_SIZE    (PAGE_SIZE)
  6.  
  7. /* MFPR register bit definitions */
  8. #define MFPR_PULL_SEL        (0x1 << 15)
  9. #define MFPR_PULLUP_EN        (0x1 << 14)
  10. #define MFPR_PULLDOWN_EN    (0x1 << 13)
  11. #define MFPR_SLEEP_SEL        (0x1 << 9)
  12. #define MFPR_SLEEP_OE_N        (0x1 << 7)
  13. #define MFPR_EDGE_CLEAR        (0x1 << 6)
  14. #define MFPR_EDGE_FALL_EN    (0x1 << 5)
  15. #define MFPR_EDGE_RISE_EN    (0x1 << 4)
  16.  
  17. #define MFPR_SLEEP_DATA(x)    ((x) << 8)
  18. #define MFPR_DRIVE(x)        (((x) & 0x7) << 10)
  19. #define MFPR_AF_SEL(x)        (((x) & 0x7) << 0)
  20.  
  21. #define MFPR_EDGE_NONE        (0)
  22. #define MFPR_EDGE_RISE        (MFPR_EDGE_RISE_EN)
  23. #define MFPR_EDGE_FALL        (MFPR_EDGE_FALL_EN)
  24. #define MFPR_EDGE_BOTH        (MFPR_EDGE_RISE | MFPR_EDGE_FALL)
  25.  
  26. /*
  27.  * Table that determines the low power modes outputs, with actual settings
  28.  * used in parentheses for don't-care values. Except for the float output,
  29.  * the configured driven and pulled levels match, so if there is a need for
  30.  * non-LPM pulled output, the same configuration could probably be used.
  31.  *
  32.  * Output value  sleep_oe_n  sleep_data  pullup_en  pulldown_en  pull_sel
  33.  *                 (bit 7)    (bit 8)    (bit 14)     (bit 13)   (bit 15)
  34.  *
  35.  * Input            0          X(0)        X(0)        X(0)       0
  36.  * Drive 0          0          0           0           X(1)       0
  37.  * Drive 1          0          1           X(1)        0      0
  38.  * Pull hi (1)      1          X(1)        1           0      0
  39.  * Pull lo (0)      1          X(0)        0           1      0
  40.  * Z (float)        1          X(0)        0           0      0
  41.  */
  42. #define MFPR_LPM_INPUT        (0)
  43. #define MFPR_LPM_DRIVE_LOW    (MFPR_SLEEP_DATA(0) | MFPR_PULLDOWN_EN)
  44. #define MFPR_LPM_DRIVE_HIGH        (MFPR_SLEEP_DATA(1) | MFPR_PULLUP_EN)
  45. #define MFPR_LPM_PULL_LOW          (MFPR_LPM_DRIVE_LOW  | MFPR_SLEEP_OE_N)
  46. #define MFPR_LPM_PULL_HIGH         (MFPR_LPM_DRIVE_HIGH | MFPR_SLEEP_OE_N)
  47. #define MFPR_LPM_FLOAT             (MFPR_SLEEP_OE_N)
  48. #define MFPR_LPM_MASK        (0xe080)
  49.  
  50. /*
  51.  * The pullup and pulldown state of the MFP pin at run mode is by default
  52.  * determined by the selected alternate function. In case that some buggy
  53.  * devices need to override this default behavior,  the definitions below
  54.  * indicates the setting of corresponding MFPR bits
  55.  *
  56.  * Definition       pull_sel  pullup_en  pulldown_en
  57.  * MFPR_PULL_NONE       0         0        0
  58.  * MFPR_PULL_LOW        1         0        1
  59.  * MFPR_PULL_HIGH       1         1        0
  60.  * MFPR_PULL_BOTH       1         1        1
  61.  */
  62. #define MFPR_PULL_NONE        (0)
  63. #define MFPR_PULL_LOW        (MFPR_PULL_SEL | MFPR_PULLDOWN_EN)
  64. #define MFPR_PULL_BOTH        (MFPR_PULL_LOW | MFPR_PULLUP_EN)
  65. #define MFPR_PULL_HIGH        (MFPR_PULL_SEL | MFPR_PULLUP_EN)
  66.  
  67. /* PXA3xx common MFP configurations - processor specific ones defined
  68.  * in mfp-pxa300.h and mfp-pxa320.h
  69.  */
  70. #define GPIO0_GPIO        MFP_CFG(GPIO0, AF0)
  71. #define GPIO1_GPIO        MFP_CFG(GPIO1, AF0)
  72. #define GPIO2_GPIO        MFP_CFG(GPIO2, AF0)
  73. #define GPIO3_GPIO        MFP_CFG(GPIO3, AF0)
  74. #define GPIO4_GPIO        MFP_CFG(GPIO4, AF0)
  75. #define GPIO5_GPIO        MFP_CFG(GPIO5, AF0)
  76. #define GPIO6_GPIO        MFP_CFG(GPIO6, AF0)
  77. #define GPIO7_GPIO        MFP_CFG(GPIO7, AF0)
  78. #define GPIO8_GPIO        MFP_CFG(GPIO8, AF0)
  79. #define GPIO9_GPIO        MFP_CFG(GPIO9, AF0)
  80. #define GPIO10_GPIO        MFP_CFG(GPIO10, AF0)
  81. #define GPIO11_GPIO        MFP_CFG(GPIO11, AF0)
  82. #define GPIO12_GPIO        MFP_CFG(GPIO12, AF0)
  83. #define GPIO13_GPIO        MFP_CFG(GPIO13, AF0)
  84. #define GPIO14_GPIO        MFP_CFG(GPIO14, AF0)
  85. #define GPIO15_GPIO        MFP_CFG(GPIO15, AF0)
  86. #define GPIO16_GPIO        MFP_CFG(GPIO16, AF0)
  87. #define GPIO17_GPIO        MFP_CFG(GPIO17, AF0)
  88. #define GPIO18_GPIO        MFP_CFG(GPIO18, AF0)
  89. #define GPIO19_GPIO        MFP_CFG(GPIO19, AF0)
  90. #define GPIO20_GPIO        MFP_CFG(GPIO20, AF0)
  91. #define GPIO21_GPIO        MFP_CFG(GPIO21, AF0)
  92. #define GPIO22_GPIO        MFP_CFG(GPIO22, AF0)
  93. #define GPIO23_GPIO        MFP_CFG(GPIO23, AF0)
  94. #define GPIO24_GPIO        MFP_CFG(GPIO24, AF0)
  95. #define GPIO25_GPIO        MFP_CFG(GPIO25, AF0)
  96. #define GPIO26_GPIO        MFP_CFG(GPIO26, AF0)
  97. #define GPIO27_GPIO        MFP_CFG(GPIO27, AF0)
  98. #define GPIO28_GPIO        MFP_CFG(GPIO28, AF0)
  99. #define GPIO29_GPIO        MFP_CFG(GPIO29, AF0)
  100. #define GPIO30_GPIO        MFP_CFG(GPIO30, AF0)
  101. #define GPIO31_GPIO        MFP_CFG(GPIO31, AF0)
  102. #define GPIO32_GPIO        MFP_CFG(GPIO32, AF0)
  103. #define GPIO33_GPIO        MFP_CFG(GPIO33, AF0)
  104. #define GPIO34_GPIO        MFP_CFG(GPIO34, AF0)
  105. #define GPIO35_GPIO        MFP_CFG(GPIO35, AF0)
  106. #define GPIO36_GPIO        MFP_CFG(GPIO36, AF0)
  107. #define GPIO37_GPIO        MFP_CFG(GPIO37, AF0)
  108. #define GPIO38_GPIO        MFP_CFG(GPIO38, AF0)
  109. #define GPIO39_GPIO        MFP_CFG(GPIO39, AF0)
  110. #define GPIO40_GPIO        MFP_CFG(GPIO40, AF0)
  111. #define GPIO41_GPIO        MFP_CFG(GPIO41, AF0)
  112. #define GPIO42_GPIO        MFP_CFG(GPIO42, AF0)
  113. #define GPIO43_GPIO        MFP_CFG(GPIO43, AF0)
  114. #define GPIO44_GPIO        MFP_CFG(GPIO44, AF0)
  115. #define GPIO45_GPIO        MFP_CFG(GPIO45, AF0)
  116.  
  117. #define GPIO47_GPIO        MFP_CFG(GPIO47, AF0)
  118. #define GPIO48_GPIO        MFP_CFG(GPIO48, AF0)
  119.  
  120. #define GPIO53_GPIO        MFP_CFG(GPIO53, AF0)
  121. #define GPIO54_GPIO        MFP_CFG(GPIO54, AF0)
  122. #define GPIO55_GPIO        MFP_CFG(GPIO55, AF0)
  123.  
  124. #define GPIO57_GPIO        MFP_CFG(GPIO57, AF0)
  125.  
  126. #define GPIO63_GPIO        MFP_CFG(GPIO63, AF0)
  127. #define GPIO64_GPIO        MFP_CFG(GPIO64, AF0)
  128. #define GPIO65_GPIO        MFP_CFG(GPIO65, AF0)
  129. #define GPIO66_GPIO        MFP_CFG(GPIO66, AF0)
  130. #define GPIO67_GPIO        MFP_CFG(GPIO67, AF0)
  131. #define GPIO68_GPIO        MFP_CFG(GPIO68, AF0)
  132. #define GPIO69_GPIO        MFP_CFG(GPIO69, AF0)
  133. #define GPIO70_GPIO        MFP_CFG(GPIO70, AF0)
  134. #define GPIO71_GPIO        MFP_CFG(GPIO71, AF0)
  135. #define GPIO72_GPIO        MFP_CFG(GPIO72, AF0)
  136. #define GPIO73_GPIO        MFP_CFG(GPIO73, AF0)
  137. #define GPIO74_GPIO        MFP_CFG(GPIO74, AF0)
  138. #define GPIO75_GPIO        MFP_CFG(GPIO75, AF0)
  139. #define GPIO76_GPIO        MFP_CFG(GPIO76, AF0)
  140. #define GPIO77_GPIO        MFP_CFG(GPIO77, AF0)
  141. #define GPIO78_GPIO        MFP_CFG(GPIO78, AF0)
  142. #define GPIO79_GPIO        MFP_CFG(GPIO79, AF0)
  143. #define GPIO80_GPIO        MFP_CFG(GPIO80, AF0)
  144. #define GPIO81_GPIO        MFP_CFG(GPIO81, AF0)
  145. #define GPIO82_GPIO        MFP_CFG(GPIO82, AF0)
  146. #define GPIO83_GPIO        MFP_CFG(GPIO83, AF0)
  147. #define GPIO84_GPIO        MFP_CFG(GPIO84, AF0)
  148. #define GPIO85_GPIO        MFP_CFG(GPIO85, AF0)
  149. #define GPIO86_GPIO        MFP_CFG(GPIO86, AF0)
  150. #define GPIO87_GPIO        MFP_CFG(GPIO87, AF0)
  151. #define GPIO88_GPIO        MFP_CFG(GPIO88, AF0)
  152. #define GPIO89_GPIO        MFP_CFG(GPIO89, AF0)
  153. #define GPIO90_GPIO        MFP_CFG(GPIO90, AF0)
  154. #define GPIO91_GPIO        MFP_CFG(GPIO91, AF0)
  155. #define GPIO92_GPIO        MFP_CFG(GPIO92, AF0)
  156. #define GPIO93_GPIO        MFP_CFG(GPIO93, AF0)
  157. #define GPIO94_GPIO        MFP_CFG(GPIO94, AF0)
  158. #define GPIO95_GPIO        MFP_CFG(GPIO95, AF0)
  159. #define GPIO96_GPIO        MFP_CFG(GPIO96, AF0)
  160. #define GPIO97_GPIO        MFP_CFG(GPIO97, AF0)
  161. #define GPIO98_GPIO        MFP_CFG(GPIO98, AF0)
  162. #define GPIO99_GPIO        MFP_CFG(GPIO99, AF0)
  163. #define GPIO100_GPIO        MFP_CFG(GPIO100, AF0)
  164. #define GPIO101_GPIO        MFP_CFG(GPIO101, AF0)
  165. #define GPIO102_GPIO        MFP_CFG(GPIO102, AF0)
  166. #define GPIO103_GPIO        MFP_CFG(GPIO103, AF0)
  167. #define GPIO104_GPIO        MFP_CFG(GPIO104, AF0)
  168. #define GPIO105_GPIO        MFP_CFG(GPIO105, AF0)
  169. #define GPIO106_GPIO        MFP_CFG(GPIO106, AF0)
  170. #define GPIO107_GPIO        MFP_CFG(GPIO107, AF0)
  171. #define GPIO108_GPIO        MFP_CFG(GPIO108, AF0)
  172. #define GPIO109_GPIO        MFP_CFG(GPIO109, AF0)
  173. #define GPIO110_GPIO        MFP_CFG(GPIO110, AF0)
  174. #define GPIO111_GPIO        MFP_CFG(GPIO111, AF0)
  175. #define GPIO112_GPIO        MFP_CFG(GPIO112, AF0)
  176. #define GPIO113_GPIO        MFP_CFG(GPIO113, AF0)
  177. #define GPIO114_GPIO        MFP_CFG(GPIO114, AF0)
  178. #define GPIO115_GPIO        MFP_CFG(GPIO115, AF0)
  179. #define GPIO116_GPIO        MFP_CFG(GPIO116, AF0)
  180. #define GPIO117_GPIO        MFP_CFG(GPIO117, AF0)
  181. #define GPIO118_GPIO        MFP_CFG(GPIO118, AF0)
  182. #define GPIO119_GPIO        MFP_CFG(GPIO119, AF0)
  183. #define GPIO120_GPIO        MFP_CFG(GPIO120, AF0)
  184. #define GPIO121_GPIO        MFP_CFG(GPIO121, AF0)
  185. #define GPIO122_GPIO        MFP_CFG(GPIO122, AF0)
  186. #define GPIO123_GPIO        MFP_CFG(GPIO123, AF0)
  187. #define GPIO124_GPIO        MFP_CFG(GPIO124, AF0)
  188. #define GPIO125_GPIO        MFP_CFG(GPIO125, AF0)
  189. #define GPIO126_GPIO        MFP_CFG(GPIO126, AF0)
  190. #define GPIO127_GPIO        MFP_CFG(GPIO127, AF0)
  191.  
  192. #define GPIO0_2_GPIO        MFP_CFG(GPIO0_2, AF0)
  193. #define GPIO1_2_GPIO        MFP_CFG(GPIO1_2, AF0)
  194. #define GPIO2_2_GPIO        MFP_CFG(GPIO2_2, AF0)
  195. #define GPIO3_2_GPIO        MFP_CFG(GPIO3_2, AF0)
  196. #define GPIO4_2_GPIO        MFP_CFG(GPIO4_2, AF0)
  197. #define GPIO5_2_GPIO        MFP_CFG(GPIO5_2, AF0)
  198. #define GPIO6_2_GPIO        MFP_CFG(GPIO6_2, AF0)
  199.  
  200. /*
  201.  * each MFP pin will have a MFPR register, since the offset of the
  202.  * register varies between processors, the processor specific code
  203.  * should initialize the pin offsets by pxa3xx_mfp_init_addr()
  204.  *
  205.  * pxa3xx_mfp_init_addr - accepts a table of "pxa3xx_mfp_addr_map"
  206.  * structure, which represents a range of MFP pins from "start" to
  207.  * "end", with the offset begining at "offset", to define a single
  208.  * pin, let "end" = -1
  209.  *
  210.  * use
  211.  *
  212.  * MFP_ADDR_X() to define a range of pins
  213.  * MFP_ADDR()   to define a single pin
  214.  * MFP_ADDR_END to signal the end of pin offset definitions
  215.  */
  216. struct pxa3xx_mfp_addr_map {
  217.     unsigned int    start;
  218.     unsigned int    end;
  219.     unsigned long    offset;
  220. };
  221.  
  222. #define MFP_ADDR_X(start, end, offset) \
  223.     { MFP_PIN_##start, MFP_PIN_##end, offset }
  224.  
  225. #define MFP_ADDR(pin, offset) \
  226.     { MFP_PIN_##pin, -1, offset }
  227.  
  228. #define MFP_ADDR_END    { MFP_PIN_INVALID, 0 }
  229.  
  230. /*
  231.  * pxa3xx_mfp_read()/pxa3xx_mfp_write() - for direct read/write access
  232.  * to the MFPR register
  233.  */
  234. unsigned long pxa3xx_mfp_read(int mfp);
  235. void pxa3xx_mfp_write(int mfp, unsigned long mfpr_val);
  236.  
  237. /*
  238.  * pxa3xx_mfp_config - configure the MFPR registers
  239.  *
  240.  * used by board specific initialization code
  241.  */
  242. void pxa3xx_mfp_config(unsigned long *mfp_cfgs, int num);
  243.  
  244. /*
  245.  * pxa3xx_mfp_init_addr() - initialize the mapping between mfp pin
  246.  * index and MFPR register offset
  247.  *
  248.  * used by processor specific code
  249.  */
  250. void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *);
  251. void __init pxa3xx_init_mfp(void);
  252. #endif /* __ASM_ARCH_MFP_PXA3XX_H */
  253.